<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>post (1 of 3 overloads)</title>
    <link rel="stylesheet" href="../../../boostbook.css" type="text/css">
    <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
    <link rel="home" href="../../../index.html" title="Asio">
    <link rel="up" href="../post.html" title="post">
    <link rel="prev" href="../post.html" title="post">
    <link rel="next" href="overload2.html" title="post (2 of 3 overloads)">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%">
    <tr>
        <td valign="top"><img alt="asio C++ library" width="250" height="60" src="../../../asio.png"></td>
    </tr>
</table>
<hr>
<div class="spirit-nav">
    <a accesskey="p" href="../post.html"><img src="../../../prev.png" alt="Prev"></a><a accesskey="u"
                                                                                        href="../post.html"><img
        src="../../../up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../home.png"
                                                                                            alt="Home"></a><a
        accesskey="n" href="overload2.html"><img src="../../../next.png" alt="Next"></a>
</div>
<div class="section">
    <div class="titlepage">
        <div>
            <div><h4 class="title">
                <a name="asio.reference.post.overload1"></a><a class="link" href="overload1.html"
                                                               title="post (1 of 3 overloads)">post (1 of 3
                overloads)</a>
            </h4></div>
        </div>
    </div>
    <p>
        Submits a completion token or function object for execution.
    </p>
    <pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span>
    <span class="keyword">typename</span> <a class="link" href="../NullaryToken.html"
                                             title="Nullary token requirements">NullaryToken</a><span class="special">&gt;</span>
<a class="link"
   href="../asynchronous_operations.html#asio.reference.asynchronous_operations.automatic_deduction_of_initiating_function_return_type"><span
        class="emphasis"><em>DEDUCED</em></span></a> <span class="identifier">post</span><span class="special">(</span>
    <span class="identifier">NullaryToken</span> <span class="special">&amp;&amp;</span> <span
                class="identifier">token</span><span class="special">);</span>
</pre>
    <p>
        This function submits an object for execution using the object's associated
        executor. The function object is queued for execution, and is never called
        from the current thread prior to returning from <code class="computeroutput"><span
            class="identifier">post</span><span class="special">()</span></code>.
    </p>
    <p>
        The use of <code class="computeroutput"><span class="identifier">post</span><span
            class="special">()</span></code>,
        rather than <a class="link" href="../defer.html" title="defer"><code class="computeroutput"><span
            class="identifier">defer</span></code></a>,
        indicates the caller's preference that the function object be eagerly queued
        for execution.
    </p>
    <h6>
        <a name="asio.reference.post.overload1.h0"></a>
        <span><a name="asio.reference.post.overload1.parameters"></a></span><a class="link"
                                                                               href="overload1.html#asio.reference.post.overload1.parameters">Parameters</a>
    </h6>
    <div class="variablelist">
        <p class="title"><b></b></p>
        <dl>
            <dt><span class="term">token</span></dt>
            <dd>
                <p>
                    The <a class="link" href="../../overview/model/completion_tokens.html" title="Completion Tokens">completion
                    token</a> that will be used to produce a completion handler. The
                    function signature of the completion handler must be:
                </p>
                <pre class="programlisting"><span class="keyword">void</span> <span
                        class="identifier">handler</span><span class="special">();</span>
</pre>
            </dd>
        </dl>
    </div>
    <h6>
        <a name="asio.reference.post.overload1.h1"></a>
        <span><a name="asio.reference.post.overload1.return_value"></a></span><a class="link"
                                                                                 href="overload1.html#asio.reference.post.overload1.return_value">Return
        Value</a>
    </h6>
    <p>
        This function returns <code class="computeroutput"><span class="identifier">async_initiate</span><span
            class="special">&lt;</span><span class="identifier">NullaryToken</span><span class="special">,</span> <span
            class="keyword">void</span><span class="special">()&gt;(</span><span class="identifier">Init</span><span
            class="special">{},</span> <span class="identifier">token</span><span class="special">)</span></code>,
        where <code class="computeroutput"><span class="identifier">Init</span></code> is a function
        object type defined as:
    </p>
    <pre class="programlisting"><span class="keyword">class</span> <span class="identifier">Init</span>
<span class="special">{</span>
<span class="keyword">public</span><span class="special">:</span>
  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span
                class="identifier">CompletionHandler</span><span class="special">&gt;</span>
    <span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span><span
                class="identifier">CompletionHandler</span><span class="special">&amp;&amp;</span> <span
                class="identifier">completion_handler</span><span class="special">)</span> <span
                class="keyword">const</span><span class="special">;</span>
<span class="special">};</span>
</pre>
    <p>
        The function call operator of <code class="computeroutput"><span class="identifier">Init</span><span
            class="special">:</span></code>
    </p>
    <div class="itemizedlist">
        <ul class="itemizedlist" type="disc">
            <li class="listitem">
                <p class="simpara">
                    Obtains the handler's associated executor object <code class="computeroutput"><span
                        class="identifier">ex</span></code>
                    of type <code class="computeroutput"><span class="identifier">Ex</span></code> by performing
                </p>
                <pre class="programlisting"><span class="keyword">auto</span> <span class="identifier">ex</span> <span
                        class="special">=</span> <span class="identifier">get_associated_executor</span><span
                        class="special">(</span><span class="identifier">handler</span><span class="special">);</span>
</pre>
            </li>
            <li class="listitem">
                <p class="simpara">
                    Obtains the handler's associated allocator object <code class="computeroutput"><span
                        class="identifier">alloc</span></code>
                    by performing
                </p>
                <pre class="programlisting"><span class="keyword">auto</span> <span
                        class="identifier">alloc</span> <span class="special">=</span> <span class="identifier">get_associated_allocator</span><span
                        class="special">(</span><span class="identifier">handler</span><span class="special">);</span>
</pre>
            </li>
            <li class="listitem">
                <p class="simpara">
                    If <code class="computeroutput"><span class="identifier">execution</span><span
                        class="special">::</span><span class="identifier">is_executor</span><span
                        class="special">&lt;</span><span class="identifier">Ex</span><span class="special">&gt;::</span><span
                        class="identifier">value</span></code> is true, performs
                </p>
                <pre class="programlisting"><span class="identifier">execution</span><span
                        class="special">::</span><span class="identifier">execute</span><span class="special">(</span>
    <span class="identifier">prefer</span><span class="special">(</span>
      <span class="identifier">require</span><span class="special">(</span><span class="identifier">ex</span><span
                            class="special">,</span> <span class="identifier">execution</span><span
                            class="special">::</span><span class="identifier">blocking</span><span
                            class="special">.</span><span class="identifier">never</span><span class="special">),</span>
      <span class="identifier">execution</span><span class="special">::</span><span
                            class="identifier">relationship</span><span class="special">.</span><span
                            class="identifier">fork</span><span class="special">,</span>
      <span class="identifier">execution</span><span class="special">::</span><span
                            class="identifier">allocator</span><span class="special">(</span><span class="identifier">alloc</span><span
                            class="special">)),</span>
    <span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span
                            class="special">&lt;</span><span class="identifier">CompletionHandler</span><span
                            class="special">&gt;(</span><span class="identifier">completion_handler</span><span
                            class="special">));</span>
</pre>
            </li>
            <li class="listitem">
                <p class="simpara">
                    If <code class="computeroutput"><span class="identifier">execution</span><span
                        class="special">::</span><span class="identifier">is_executor</span><span
                        class="special">&lt;</span><span class="identifier">Ex</span><span class="special">&gt;::</span><span
                        class="identifier">value</span></code> is false, performs
                </p>
                <pre class="programlisting"><span class="identifier">ex</span><span class="special">.</span><span
                        class="identifier">post</span><span class="special">(</span>
    <span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span
                            class="special">&lt;</span><span class="identifier">CompletionHandler</span><span
                            class="special">&gt;(</span><span class="identifier">completion_handler</span><span
                            class="special">),</span>
    <span class="identifier">alloc</span><span class="special">);</span>
</pre>
            </li>
        </ul>
    </div>
    <h6>
        <a name="asio.reference.post.overload1.h2"></a>
        <span><a name="asio.reference.post.overload1.completion_signature"></a></span><a class="link"
                                                                                         href="overload1.html#asio.reference.post.overload1.completion_signature">Completion
        Signature</a>
    </h6>
    <pre class="programlisting"><span class="keyword">void</span><span class="special">()</span>
</pre>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%">
    <tr>
        <td align="left"></td>
        <td align="right">
            <div class="copyright-footer">Copyright © 2003-2022 Christopher M. Kohlhoff<p>
                Distributed under the Boost Software License, Version 1.0. (See accompanying
                file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
            </p>
            </div>
        </td>
    </tr>
</table>
<hr>
<div class="spirit-nav">
    <a accesskey="p" href="../post.html"><img src="../../../prev.png" alt="Prev"></a><a accesskey="u"
                                                                                        href="../post.html"><img
        src="../../../up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../home.png"
                                                                                            alt="Home"></a><a
        accesskey="n" href="overload2.html"><img src="../../../next.png" alt="Next"></a>
</div>
</body>
</html>
